package com.rc.web.mapper;

import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.query.QueryWrapper;
import com.rc.pojo.po.Collect;

import java.util.List;

import static com.rc.pojo.po.table.CollectTableDef.COLLECT;

/**
 * 用户收藏表 映射层。
 * 提供用户收藏相关的数据库操作接口
 */
public interface CollectMapper extends BaseMapper<Collect> {

    /**
     * 判断是否已收藏
     * @param mapId 收藏项ID
     * @param type 收藏类型
     * @param conId 用户ID
     * @return 是否已收藏
     */
    default boolean isCollect(long mapId,int type,long conId){
        return selectCountByQuery(QueryWrapper.create()
                .where(COLLECT.ITEM_ID.eq(mapId))
                .and(COLLECT.CON_ID.eq(conId))
                .and(COLLECT.TYPE.eq(type))) > 0;
    }

    /**
     * 根据用户ID和类型查询收藏列表
     * @param conId 用户ID
     * @param type 收藏类型
     * @return 收藏列表
     */
    default List<Collect> selectByConId(long conId,Integer type){
        return selectListByQuery(QueryWrapper.create()
                .where(COLLECT.CON_ID.eq(conId))
                .and(COLLECT.TYPE.eq(type))
        );
    }

    /**
     * 根据收藏项ID和类型删除收藏
     * @param itemId 收藏项ID
     * @param type 收藏类型
     */
    default void deleteByItemIdAndType(long itemId, int type){
        deleteByQuery(QueryWrapper.create()
                .and(COLLECT.ITEM_ID.eq(itemId))
                .and(COLLECT.TYPE.eq(type))
        );
    }

    /**
     * 根据收藏项ID和类型更新收藏
     * @param collect 收藏实体
     */
    default void updateByItemIdAndType(Collect collect){
        updateByQuery(collect,true,QueryWrapper.create()
                .and(COLLECT.ITEM_ID.eq(collect.getItemId()))
                .and(COLLECT.TYPE.eq(collect.getType()))
        );
    }
}
